package org.ch00.test03.demo02;

/**
 * Java老师
 *
 * @author ZQX
 * @date 2025-02-28
 */
public class JavaTeacher extends Teacher {

    public JavaTeacher() {
    }

    /**
     * this表示当前对象的引用，它可以当前对象的的成员
     * 语法为：this.成员名称
     * 注意：this关键字可以省略不写
     *
     * <p>
     * 同时，也可以通过 this 关键字调用当前对象的重载构造方法，
     * 语法为：this(参数列表)
     * <p>
     *
     * @param name
     */
    public JavaTeacher(String name) {
        // 注意：使用this和super调用构造方法时，必须放在第一位
        this(name, "NF");

        // this.setName(name);
    }

    /**
     * super表示父类对象的引用，它可以引用父类的成员
     * 语法为：super.成员名称
     * <p>
     * 同时，也可以通过 super 关键字调用父类的构造方法，
     * 语法为：super(参数列表)
     *
     * @param name
     * @param school
     */
    public JavaTeacher(String name, String school) {
        super(name, school);
    }

    /**
     * 覆盖/重写父类的方法 - 增强父类的行为/功能
     * <p>
     * 重写 ：子类定义与父类完成一样的方法
     * 方法名相同 && 参数个数相同 && 参数类型相同 && 返回值类型相同
     * 子类的访问修饰符必须要比父类的访问修饰符大
     */
    public void teach() {
        // 1.子类扩展的功能
        System.out.println("打开IDEA ...");

        // 2.子类复用父类的功能
        // 思考：希望在子类中，调用父类的方法
        // this表示当前对象，而super表示父类对象的引用
        super.teach();

        // 3.上完课必须打把游戏
        this.playGame();
    }

    /**
     * 子类继承父类，拥有父类的成员
     * 同时，子类一般也应该具有自己特有的成员
     */
    public void playGame() {
        System.out.println("玩游戏...");
    }

}
